package com.ruoyi.system.kiteUtils;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

public class FieldChangeUtils {

    /**
     * 检测两个对象之间的字段变化
     * @param oldObj 更新前的对象
     * @param newObj 更新后的对象
     * @return 变化的字段名列表
     */
    public static List<String> getChangedFields(Object oldObj, Object newObj) {
        List<String> changedFields = new ArrayList<>();

        if (oldObj == null || newObj == null || !oldObj.getClass().equals(newObj.getClass())) {
            return changedFields;
        }

        Field[] fields = oldObj.getClass().getDeclaredFields();
        for (Field field : fields) {
            try {
                field.setAccessible(true);
                Object oldValue = field.get(oldObj);
                Object newValue = field.get(newObj);

                if (!Objects.equals(oldValue, newValue)) {
                    changedFields.add(field.getName());
                }
            } catch (IllegalAccessException e) {
                // 忽略无法访问的字段
            }
        }

        return changedFields;
    }
}